const puppeteer=require('puppeteer');
let request=require('request-promise-native');
const fs = require('fs');
const axios=require('axios');
const moment = require('moment');
const now = moment().format('YYYYMMDD');


// 使用puppeteer.launch启动Chrome
async function main(){
  const bro=await puppeteer.launch({//代表浏览器
    headless:false,    // 有浏览器界面启动
    slowMo:150,      // 放慢浏览器执行速度，方便测试观察
    args:[
      '-no-sandbox',
      '--window-size=1366,768'
    ],
  });
  const page=await bro.newPage();//创建新窗口 新页面
  page.setViewport({width: 1366, height: 768})
  //跳转页面
  await page.goto('https://v.qq.com/channel/cartoon?listpage=1&channel=cartoon&sort=18&_all=1');
var min = 0,max =15
 let total = 100
	 total = await page.evaluate(() => {
 			let $ = window.$;
 			return  $('.filter_result').find('span').text()
 	   })
	   return new Promise((resolve, reject)=>{
		   async function forFunction(){
		   		 
		   		extractData(page,min,max,total)  //抓取数据
		   		console.log(`调用extractData:min是：${min},max是：${max}`)
		   		if(max<total){//
		   			min +=15
		   			max +=15
		   			await page.keyboard.down('PageDown');
		   			await page.keyboard.down('PageDown');
		   			await page.keyboard.down('PageDown');
		   			forFunction()
		   		}else{
		   			console.log('任务完成 2秒后关闭')
					resolve({status:200,msg:'抓取完成'})
		   			setTimeout(function(){
		   				close()
		   			},2000)
		   		}
		    }
		    
		    // 执行任务
		    forFunction()
		    
		   async function close(){
		    		await page.close();
		    		await bro.close();	  
		    }
		   
		   
	   })

	   // extractData(page,1,10) //测试时可以直接使用这里 注释掉 上面部分 

};	


async function extractData(page,_min,_max,_total){
	console.log(`开始提取数据...`)
	
var data = await page.evaluate((min,max,total) => {
			let result =[] //结果集
			let $ = window.$
			if(max>total){
				max = total
			}
			for(let i = min;i<max;i++){
				let $el = $('.list_item').eq(i); // 要找到的目标元素li
				  if(!$el){continue}
				    // 需要保存的数据
				    result.push({
						title: $el.find('.figure_title').text(),//标题
						titleLink:$el.find('.figure_title').prop('href'),//链接
						imgUrl: $el.find('.figure').find('img').prop('src')+'.jpg',//图片地址
						exclusive:$el.find('.mark_v').prop('alt'),//会员或者独家
						episode:$el.find('.figure_caption').text(),//更新到多少话了
						synopsis:$el.find('.figure_desc').text()//简介
					});
			}
			
			  // 返回数据
			  return result
			  // return _a
			  
	   },_min,_max,_total)
	  // console.log(data)
	  //写数据 与 上传
	 writeFile(data)
}

//写入文件
async function writeFile(data){
	console.log('开始保存提交数据...')
	
	let upData = {
		action:'tengxun',
		data:data
	}
	axios.post('https://ff5f406c-368c-4527-9a5a-3e83eab9e589.bspapp.com/http/collector', upData).then(res => {
		  console.log(res.data)
	}).catch(error => {
		console.log(error) 
	})   //查询失败返回的值
	
	let formatData = JSON.stringify(data,null, 4);//格式化数据
	fs.writeFile(`./log/tengxun${now}.json`, formatData, {'encoding':'utf8','flag':'a'}, (err) => {//flag:a 累加写入 w 清空写入
	    if (err){
			console.log(err)  
		  } 
	    console.log('已写入json');
	});
	
	
}


// main()
module.exports =  {main}
